package com.example.demo.service;

import com.example.demo.dto.UserLoginDto;
import com.example.demo.dto.UserProfileDto;
import com.example.demo.dto.UserRegisterDto;
import com.example.demo.entity.User;

/**
 * 用户服务接口
 * 定义用户相关业务操作
 */
public interface UserService {
    
    /**
     * 用户注册
     * @param userRegisterDto 注册信息
     * @return 注册成功的用户信息（不含密码）
     */
    User register(UserRegisterDto userRegisterDto);
    
    /**
     * 用户登录
     * @param userLoginDto 登录信息
     * @return 登录成功的用户信息（不含密码）
     */
    User login(UserLoginDto userLoginDto);
    
    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);
    
    /**
     * 根据用户ID查询用户
     * @param id 用户ID
     * @return 用户信息
     */
    User getUserById(Long id);
    
    /**
     * 更新用户个人资料
     * @param userId 用户ID
     * @param userProfileDto 个人资料信息
     * @return 更新后的用户信息（不含密码）
     */
    User updateUserProfile(Long userId, UserProfileDto userProfileDto);
    
    /**
     * 检查用户名是否存在
     * @param username 用户名
     * @return true-存在，false-不存在
     */
    boolean isUsernameExists(String username);
    
    /**
     * 检查邮箱是否存在（排除指定用户ID）
     * @param email 邮箱
     * @param excludeUserId 排除的用户ID
     * @return true-存在，false-不存在
     */
    boolean isEmailExists(String email, Long excludeUserId);
    
    /**
     * 检查邮箱是否存在
     * @param email 邮箱
     * @return true-存在，false-不存在
     */
    boolean isEmailExists(String email);
    
    /**
     * 检查手机号是否存在（排除指定用户ID）
     * @param phone 手机号
     * @param excludeUserId 排除的用户ID
     * @return true-存在，false-不存在
     */
    boolean isPhoneExists(String phone, Long excludeUserId);
    
    /**
     * 检查手机号是否存在
     * @param phone 手机号
     * @return true-存在，false-不存在
     */
    boolean isPhoneExists(String phone);
}
